/*
 * controlRobot11B.cpp
 *
 *  Created on: Nov 7, 2013
 *      Author: m
 */

#include "DefinicionesComunes.h"
#include "CPrinter.h"
#include <ctime>
#include "ICinta13B.h"
#include "IRobot11B.h"
#include "IRobot14.h"
#include "ControladorR11B.h"
#include "DSMManager.h"

using ipc::CPrinter;

int main ( int argc, char* argv[] )
{
    DSMManager::inicializar("robot11b");

    ControladorR11B controlador;

    ICinta13B *cinta13B;
    IRobot11B *robot11B;
    IRobot14  *robot14;

    cinta13B = &controlador;
    robot11B = &controlador;
    robot14  = &controlador;

    int numeroElemento = 1000;
    int sleepTime;
    bool puedeDepositar;

    CPrinter::setHeader("R11B");

    srand( getpid() );

    while ( true )
    {
        // Genero elementos de entrada;

        sleepTime = SLEEP_GENERAR_ELEMENTO;

        CPrinter::printOut( "Esperando para generar magicamente un nuevo"
                " elemento durante: %ds", sleepTime );
        sleep( sleepTime );

        ElementoProduccion elemento;
        elemento.productoId = numeroElemento;

        // Simulo tiempo para depositar el elemento
        CPrinter::printOut( "Intentando depositar el elemento %d",
                elemento.productoId );

        bool depositoOk = cinta13B->depositar( elemento );

        if ( !depositoOk )
        {
            CPrinter::printOut( "No se pudo depositar, esperando espacio vacio" );
            robot11B->esperarEspacioVacio();

            cinta13B->depositar( elemento );
        }

        sleepTime = SLEEP_DEPOSITAR_ELEMENTO;
        CPrinter::printOut( "Depositando Elemento: %d en la cinta 13B,"
                        " durante: %ds", elemento.productoId, sleepTime );
        sleep( sleepTime );

        if ( cinta13B->avanzar() )
        {
            sleepTime = SLEEP_AVANZAR_CINTA;
            CPrinter::printOut( "Avanzando la cinta 13B durante: %ds",
                    sleepTime );
            sleep( sleepTime );
        }

        robot14->notificarNuevoElemento();

        numeroElemento++;
    }

    return 0;
}
